ルビを取る処理の習得記録 Part 2 「公式ドキュメントで迷子」~「正規表現ルート確定」
ドキュメントの惑星群
文字列で検索すると引っかかったのは以下
Range
範囲オブジェクトのクラス。範囲オブジェクトは文字どおり何らかの意味での範囲を表します。数の範囲はもちろん、日付の範囲や、「"a" から "z" まで」といった文字列の範囲を表すこともできます。 String
文字列のクラスです。ヌル文字を含む任意のバイト列を扱うことができます。文字列の長さにはメモリ容量以外の制限はありません。 君のことは知ってますよ(ほぼ初対面)
なんか数字ではなくって文字の扱いになるんでしょう?
今回""があるのでここ関わってきそう
ホントに探索してるみたいだ
文字列同士の比較・結合
文字列同士の比較・結合などでは両者のエンコーディングを意識する必要があります。
例えば String#== や String#eql? は両者のエンコーディングが等しくバイト列表現が等しい場合にのみ true を返します。このときエンコーディングが UTF-8 であっても正規化せずに比較します。文字列の結合も同様です。異なるエンコーディング同士の文字列を結合する時は明示的にエンコーディングを変換する必要があります。
code:ruby
s = "いろは"
a = s.encode("EUC-JP")
b = s.encode("UTF-8")
s = "合".encode("EUC-JP")
p s + "\u{4f53}".encode("EUC-JP") #=> "合体" p s + "\u{4f53}" #=> Encoding::CompatibilityError 今回は別のエンコーディングは使わないはずだから気にしなくて良いはず
はずを二回使う
self[nth] = val
nth 番目の文字を文字列 val で置き換えます。
置き換えは近いけど違う
あらかじめ変えたい文字の場所が決まってるときには使える
これだとどうなる?
code:Ruby
buf = "ゴジラ"
ウワッだめだっ
https://gyazo.com/fd23185e9f9643a51dacf229f747f9f0https://gyazo.com/2466540fdeca8c4d01aed72155c65102
右だとうまく行った
全角・半角の差でもなさそう
https://gyazo.com/d24e3bfc5d393503831350cbc76175ee
この奥の深さは価値がないからスルーしていいと思う……takker.icon
沼だな…nishio.icon
Outer Wildをプレイして宇宙空間に投げ出されてるみたいな状況だw
根本的問題ではw
https://gyazo.com/d4afcd8c9e9150a9f9e90c90ef97a03a
nthってそもそもなんだ……?
n番目ってことか
Symbol
シンボルを表すクラス。シンボルは任意の文字列と一対一に対応するオブジェクトです。
print
なにかには使うだろう
プロンプトに表示するとか
今回だとファイルそのものの書き換えだからちょっとどうかな
gsub
https://gyazo.com/9da76600f7335bce4da8d1802f284ae8
poem.gsub("toast", "honeydew")
poemに対して、gsubのインスタンスメソッドを使うよ
処理はtoastをhoneydewにするよ
使えるのかこれ?
今回は「《 》で囲まれた文字列」の範囲を指定して、それを""に置換したい
「範囲の指定」が必要だなー
いいねnishio.icon
subメソッドとgsubメソッドがそれに当たるらしい
$ (/\s+/)
みたいな謎の文言が見える
これあれだな、userscriptでよく見る表現(?)だ
範囲の指定だとRangeが関わってきそう
範囲オブジェクトのクラス。範囲オブジェクトは文字どおり何らかの意味での範囲を表します。数の範囲はもちろん、日付の範囲や、「"a" から "z" まで」といった文字列の範囲を表すこともできます。
作り方
範囲オブジェクトは、Range.new を用いるほか、範囲演算子(..' または ...')を用いた 演算子式/範囲式 で生成できます。いずれの方法でも始端と終端を与えます。
仮に、「全範囲に対して《 》はあるか?」を判定したいばあい
https://gyazo.com/bfbdeff8777ef45fcb95efa50a78df76
p (歌《うた》の話《はなし》について).cover?(《)
↑これはエラー。
code:error
(file): eval:1:in <main>': undefined local variable or method 歌《うた》の話《はなし》について' for main:Object (NameError)(Exception)
定義できないローカル変数またはメソッド`歌《うた》の話《はなし》について'のためにメインオブジェクト(名前エラー)(例外)
「歌《うた》の話《はなし》について」というメソッドはないですよ、と言っているのだろうか
言ってるやんけ()Mijinko_SD.iconbsahd.icon
なるほどcFQ2f7LRuLYP.icon
p (1..5).cover?(3)ならOK
https://gyazo.com/84e821c995883711d6d6b69be2cdc2e2
1から5の範囲に3はありますか?→あります(True)。
用事で出かけるので次回ここから
課題を見ろ
もっと初心者向けのドキュメントを探し、文字列を変更している例を探索するといいぞ。 結局このRangeオブジェクトは関係なかった感inajob.icon
p.59~正規表現の項がある
ホント文字列処理の話題に出てくるのねこの人(人でない)
正規表現を使うと、
・文字列とパターンの一致(マッチング)を調べる
・パターンを使った文字列の切り出し
などを手軽に行えます。
文字列・パターン・マッチングね
正規表現と文字列のマッチングを行うには、
/パターン/ =~ マッチングしたい文字列
と書きます
もしかして正規表現惑星ルートに着陸し始めてる???
次回→